﻿using NDF;
using NDF.Web.Optimization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Optimization;

namespace System.Web.Optimization
{
    /// <summary>
    /// 封装可以快速将 WEB 资源文件虚拟路径添加入 Bundle 映射的访问接口。
    /// </summary>
    public static class NDFBundleCollection
    {
        /// <summary>
        /// 将一组表示 WEB 资源文件的虚拟路径添加至 Bundle 映射。
        /// </summary>
        /// <param name="bundles">表示 Bundle 映射集合。</param>
        /// <param name="key">表示被添加入 Bundle 映射的虚拟路径访问键。</param>
        /// <param name="bundlePaths">
        /// 一个数组，数组中的每个元素都是一个表示要引入的资源文件虚拟路径(以字符 "~/" 开头)的对象，只能为 System.String 或 BundlePath 类型值。
        /// 注意：该参数不接收带通配符的虚拟路径。
        /// </param>
        public static void Add(this BundleCollection bundles, object key, params object[] bundlePaths)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }
            if (bundlePaths == null || bundlePaths.Length == 0)
            {
                throw new ArgumentNullException("bundlePaths");
            }
            foreach (var bundlePath in bundlePaths)
            {
                var wrapper = BundleWrapperFactory.GetBundleWrapper(key, bundlePath);
                if (!bundles.Contains(wrapper.Bundle))
                {
                    bundles.Add(wrapper.Bundle);
                }
            }
        }

        /// <summary>
        /// 将一组表示 WEB 资源文件的虚拟路径添加至 Bundle 映射。
        /// </summary>
        /// <param name="bundles">表示 Bundle 映射集合。</param>
        /// <param name="key">
        /// 表示被添加入 Bundle 映射的虚拟路径访问键。
        /// 一个数组，数组中的每个元素都是一个表示要引入的资源文件虚拟路径(以字符 "~/" 开头)的对象，只能为 System.String 或 BundlePath 类型值。
        /// 注意：该参数不接收带通配符的虚拟路径。
        /// </param>
        public static void Add(this BundleCollection bundles, string key, params object[] bundlePaths)
        {
            //if (VirtualPathUtility.IsAbsolute(key) || VirtualPathUtility.IsAppRelative(key))
            //{
            //    throw new ArgumentException("传入的参数 key 应该是一个不可用于作为相对/绝对路径的标识符.", "key");
            //}
            //else
            //{
                bundles.Add(key as object, bundlePaths);
            //}
        }
    }
}
